﻿using System.Data;
using System;
using Negocio.View.Base;
using Negocio.Generico;



namespace Negocio.View
{
    /// <summary>
    /// Objeto de de la vista de un hilo
    /// </summary>
    public class MensajeView : ViewBase
    {
        #region Singleton

        private static MensajeView instance;

        private MensajeView()
        {
            //Constructor vacio
        }

        public static MensajeView GetInstance()
        {
            if (instance == null)
            {
                instance = new MensajeView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Codigo asociado al mensaje
        /// </summary>
        public const string CODIGOMENSAJE = "CODIGOMENSAJE";

        /// <summary>
        /// Titutlos del hilo
        /// </summary>
        public const string TITULO = "TITULO";

        /// <summary>
        /// Codigo asociado a la persona
        /// </summary>
        public const string CODIGOPERSONA = "CODIGOPERSONA";

        /// <summary>
        /// Contenido
        /// </summary>
        public const string CONTENIDO = "CONTENIDO";

        /// <summary>
        /// Valoracion del mensaje
        /// </summary>
        public const string VALORACION = "VALORACION";

        /// <summary>
        /// Fecha de creacion del mensaje
        /// </summary>
        public const string FECHACREACION = "FECHACREACION";


        /// <summary>
        /// Fecha de creacion del mensaje
        /// </summary>
        public const string FECHAENTREGA = "FECHAENTREGA";

        /// <summary>
        /// Codigo de renglón
        /// </summary>
        public const string CODIGORENGLON = "CODIGORENGLON";

        #endregion

        #region View

        /// <summary>
        /// funcion que devuelve un listado generico de mensajes
        /// </summary>
        /// <returns></returns>
        public DataView GetMensajesView()
        {
            return this.GetMensajesView(new MensajeDTO());
        }

        /// <summary>
        /// Funcion que devuelve un dataview para ensamblarlo directamente sobre el grid
        /// </summary>
        /// <returns>Tabla con los resultados del servicio WCF</returns>
        public DataView GetMensajesView(MensajeDTO filtro)
        {
            try
            {
                DataView dv = new DataView();
                DataTable dt = new DataTable("Mensaje");

                dt.Columns.Add(MensajeView.CODIGOMENSAJE, this.GetTypeInt32);
                dt.Columns.Add(MensajeView.TITULO, this.GetTypeString);
                dt.Columns.Add(MensajeView.CODIGOPERSONA, this.GetTypeInt32);
                dt.Columns.Add(MensajeView.CONTENIDO, this.GetTypeString);
                dt.Columns.Add(MensajeView.VALORACION, this.GetTypeSqlDouble);
                dt.Columns.Add(MensajeView.FECHACREACION, this.GetTypeSqlDateTime);
                dt.Columns.Add(MensajeView.FECHAENTREGA, this.GetTypeSqlDateTime);
                dt.Columns.Add(MensajeView.CODIGORENGLON, this.GetTypeSqlInt32);

                using (Negocio.Generico.ContratoGenericoClient servicio = new Negocio.Generico.ContratoGenericoClient())
                {
                    foreach (MensajeDTO bean in servicio.Get(filtro))
                    {
                        DataRow fila = dt.NewRow();

                        fila[MensajeView.CODIGOMENSAJE] = bean.CoMensaje;
                        fila[MensajeView.TITULO] = bean.Titulo;
                        fila[MensajeView.CODIGOPERSONA] = bean.CoPersona;
                        fila[MensajeView.CONTENIDO] = bean.Contenido;
                        fila[MensajeView.VALORACION] = bean.Valoracion;
                        fila[MensajeView.FECHACREACION]=bean.FchCreacion;
                        fila[MensajeView.FECHAENTREGA] = bean.FchEntrega;
                        fila[MensajeView.CODIGORENGLON] = bean.CoRenglon;

                        dt.Rows.Add(fila);
                    }
                }
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }

        }    
       #endregion
    }
}